home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Unicode.h
-
- Contains: Types, constants, and prototypes for Unicode Converter
-
- Copyright: © 1984-1997 by Apple Computer, Inc.
- All rights reserved.
-
- */
- #ifndef __UNICODE__
- #define __UNICODE__
-
- #ifndef __TYPES__
- #include <Types.h>
- #endif
- #ifndef __TEXTCOMMON__
- #include <TextCommon.h>
- #endif
- #ifndef __MIXEDMODE__
- #include <MixedMode.h>
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #if PRAGMA_IMPORT_SUPPORTED
- #pragma import on
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=mac68k
- #endif
-
- /* Unicode conversion contexts: */
- typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
- typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
- typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
- typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
- typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
- /* UnicodeMapVersion type & values */
- typedef SInt32 UnicodeMapVersion;
-
- enum {
- kUnicodeUseLatestMapping = -1
- };
-
- /* Types used in conversion */
- struct UnicodeMapping {
- TextEncoding unicodeEncoding;
- TextEncoding otherEncoding;
- UnicodeMapVersion mappingVersion;
- };
- typedef struct UnicodeMapping UnicodeMapping;
-
- typedef UnicodeMapping *UnicodeMappingPtr;
- typedef const UnicodeMapping *ConstUnicodeMappingPtr;
- /* Control flags for ConvertFromUnicodeToText and ConvertFromTextToUnicode */
-
- enum {
- kUnicodeUseFallbacksBit = 0,
- kUnicodeKeepInfoBit = 1,
- kUnicodeDirectionalityBits = 2,
- kUnicodeVerticalFormBit = 4,
- kUnicodeLooseMappingsBit = 5,
- kUnicodeStringUnterminatedBit = 6,
- kUnicodeTextRunBit = 7,
- kUnicodeKeepSameEncodingBit = 8
- };
-
-
- enum {
- kUnicodeUseFallbacksMask = 1L << kUnicodeUseFallbacksBit,
- kUnicodeKeepInfoMask = 1L << kUnicodeKeepInfoBit,
- kUnicodeDirectionalityMask = 3L << kUnicodeDirectionalityBits,
- kUnicodeVerticalFormMask = 1L << kUnicodeVerticalFormBit,
- kUnicodeLooseMappingsMask = 1L << kUnicodeLooseMappingsBit,
- kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
- kUnicodeTextRunMask = 1L << kUnicodeTextRunBit,
- kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
- };
-
- /* Values for kUnicodeDirectionality field */
-
- enum {
- kUnicodeDefaultDirection = 0,
- kUnicodeLeftToRight = 1,
- kUnicodeRightToLeft = 2
- };
-
- /* Directionality masks for control flags */
-
- enum {
- kUnicodeDefaultDirectionMask = kUnicodeDefaultDirection << kUnicodeDirectionalityBits,
- kUnicodeLeftToRightMask = kUnicodeLeftToRight << kUnicodeDirectionalityBits,
- kUnicodeRightToLeftMask = kUnicodeRightToLeft << kUnicodeDirectionalityBits
- };
-
- /* Control flags for TruncateForUnicodeToText: */
- /*
- Now TruncateForUnicodeToText uses control flags from the same set as used by
- ConvertFromTextToUnicode, ConvertFromUnicodeToText, etc., but only
- kUnicodeStringUnterminatedMask is meaningful for TruncateForUnicodeToText.
-
- Previously two special control flags were defined for TruncateForUnicodeToText:
- kUnicodeTextElementSafeBit = 0
- kUnicodeRestartSafeBit = 1
- However, neither of these was implemented.
- Instead of implementing kUnicodeTextElementSafeBit, we now use
- kUnicodeStringUnterminatedMask since it accomplishes the same thing and avoids
- having special flags just for TruncateForUnicodeToText
- Also, kUnicodeRestartSafeBit is unnecessary, since restart-safeness is handled by
- setting kUnicodeKeepInfoBit with ConvertFromUnicodeToText.
- If TruncateForUnicodeToText is called with one or both of the old special control
- flags set (bits 0 or 1), it will not generate a paramErr, but the old bits have no
- effect on its operation.
- */
- /* Filter bits for filter field in QueryUnicodeMappings and CountUnicodeMappings: */
-
- enum {
- kUnicodeMatchUnicodeBaseBit = 0,
- kUnicodeMatchUnicodeVariantBit = 1,
- kUnicodeMatchUnicodeFormatBit = 2,
- kUnicodeMatchOtherBaseBit = 3,
- kUnicodeMatchOtherVariantBit = 4,
- kUnicodeMatchOtherFormatBit = 5
- };
-
-
- enum {
- kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
- kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
- kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
- kUnicodeMatchOtherBaseMask = 1L << kUnicodeMatchOtherBaseBit,
- kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
- kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
- };
-
- /* Control flags for SetFallbackUnicodeToText */
-
- enum {
- kUnicodeFallbackSequencingBits = 0
- };
-
-
- enum {
- kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
- };
-
- /* values for kUnicodeFallbackSequencing field */
-
- enum {
- kUnicodeFallbackDefaultOnly = 0L,
- kUnicodeFallbackCustomOnly = 1L,
- kUnicodeFallbackDefaultFirst = 2L,
- kUnicodeFallbackCustomFirst = 3L
- };
-
- /* Caller-supplied entry point to a fallback handler */
- typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *iSrcUniStr, ByteCount iSrcUniStrLen, ByteCount *oSrcConvLen, TextPtr oDestStr, ByteCount iDestStrLen, ByteCount *oDestConvLen, LogicalAddress iInfoPtr, ConstUnicodeMappingPtr iUnicodeMappingPtr);
-
- #if GENERATINGCFM
- typedef UniversalProcPtr UnicodeToTextFallbackUPP;
- #else
- typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
- #endif
-
- enum {
- uppUnicodeToTextFallbackProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TextPtr)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
- | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
- | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
- | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
- };
-
- #if GENERATINGCFM
- #define NewUnicodeToTextFallbackProc(userRoutine) \
- (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
- #else
- #define NewUnicodeToTextFallbackProc(userRoutine) \
- ((UnicodeToTextFallbackUPP) (userRoutine))
- #endif
-
- #if GENERATINGCFM
- #define CallUnicodeToTextFallbackProc(userRoutine, iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (iSrcUniStr), (iSrcUniStrLen), (oSrcConvLen), (oDestStr), (iDestStrLen), (oDestConvLen), (iInfoPtr), (iUnicodeMappingPtr))
- #else
- #define CallUnicodeToTextFallbackProc(userRoutine, iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr) \
- (*(userRoutine))((iSrcUniStr), (iSrcUniStrLen), (oSrcConvLen), (oDestStr), (iDestStrLen), (oDestConvLen), (iInfoPtr), (iUnicodeMappingPtr))
- #endif
- /* Function prototypes */
- #if GENERATING68K && !GENERATINGCFM
- /*
- Routine to Initialize the Unicode Converter and cleanup once done with it.
- These routines must be called from Static Library clients.
- */
- extern pascal OSStatus InitializeUnicode(StringPtr TECFileName);
-
- extern pascal void TerminateUnicode(void );
-
- #endif
- extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr iUnicodeMapping, TextToUnicodeInfo *oTextToUnicodeInfo);
-
- extern pascal OSStatus CreateTextToUnicodeInfoByEncoding(TextEncoding iEncoding, TextToUnicodeInfo *oTextToUnicodeInfo);
-
- extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr iUnicodeMapping, UnicodeToTextInfo *oUnicodeToTextInfo);
-
- extern pascal OSStatus CreateUnicodeToTextInfoByEncoding(TextEncoding iEncoding, UnicodeToTextInfo *oUnicodeToTextInfo);
-
- extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount iNumberOfMappings, const UnicodeMapping iUnicodeMappings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
-
- extern pascal OSStatus CreateUnicodeToTextRunInfoByEncoding(ItemCount iNumberOfEncodings, const TextEncoding iEncodings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
-
- extern pascal OSStatus CreateUnicodeToTextRunInfoByScriptCode(ItemCount iNumberOfScriptCodes, const ScriptCode iScripts[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
-
- /* Change the TextToUnicodeInfo to another mapping. */
- extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo, ConstUnicodeMappingPtr iUnicodeMapping);
-
- /* Change the UnicodeToTextInfo to another mapping. */
- extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo, ConstUnicodeMappingPtr iUnicodeMapping);
-
- extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *ioTextToUnicodeInfo);
-
- extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *ioUnicodeToTextInfo);
-
- extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *ioUnicodeToTextRunInfo);
-
- extern pascal OSStatus ConvertFromTextToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oSourceRead, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
-
- extern pascal OSStatus ConvertFromUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr);
-
- extern pascal OSStatus ConvertFromUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iEncodingRunBufLen, ItemCount *oEncodingRunOutLen, TextEncodingRun oEncodingRuns[]);
-
- extern pascal OSStatus ConvertFromUnicodeToScriptCodeRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iScriptRunBufLen, ItemCount *oScriptRunOutLen, ScriptCodeRun oScriptCodeRuns[]);
-
- /* Truncate a multibyte string at a safe place. */
- extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, ByteCount iMaxLen, ByteCount *oTruncatedLen);
-
- /* Truncate a Unicode string at a safe place. */
- extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo iUnicodeToTextInfo, ByteCount iSourceLen, ConstUniCharArrayPtr iSourceStr, OptionBits iControlFlags, ByteCount iMaxLen, ByteCount *oTruncatedLen);
-
- /* Convert a Pascal string to Unicode string. */
- extern pascal OSStatus ConvertFromPStringToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ConstStr255Param iPascalStr, ByteCount iOutputBufLen, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
-
- /* Convert a Unicode string to Pascal string. */
- extern pascal OSStatus ConvertFromUnicodeToPString(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, Str255 oPascalStr);
-
- /* Count the available conversion mappings. */
- extern pascal OSStatus CountUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount *oActualCount);
-
- /* Get a list of the available conversion mappings. */
- extern pascal OSStatus QueryUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount iMaxCount, ItemCount *oActualCount, UnicodeMapping oReturnedMappings[]);
-
- /* Setup the fallback handler for converting Unicode To Text. */
- extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
-
- /* Setup the fallback handler for converting Unicode To TextRuns. */
- extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextRunInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
-
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=reset
- #endif
-
- #if PRAGMA_IMPORT_SUPPORTED
- #pragma import off
- #endif
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __UNICODE__ */
-
-